package com.lagou.user.controller;

import com.alibaba.dubbo.config.annotation.Reference;
import com.lagou.entity.User;
import com.lagou.entity.UserDTO;
import com.lagou.user.UserService;
import org.csource.common.NameValuePair;
import org.csource.fastdfs.*;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.multipart.MultipartHttpServletRequest;

import java.io.File;
import java.util.UUID;

@RestController
@RequestMapping("/user")
public class UserController {

    @Reference // 远程注入
    private UserService userService;

    // 使用Get 的方式来进行
    @GetMapping("/login")
    public UserDTO login(String phone, String password){

        UserDTO dto = new UserDTO();

        User user = null;
        System.out.println(" phone  " + phone );
        System.out.println(" password " + password );

        // 检测手机号是否注册
        Integer i = userService.checkPhone(phone);
        if (i == 0){
            // 未注册， 注册并登陆
            userService.register(phone, password);
            dto.setMessage("手机号尚未注册，系统以帮你注册，请牢记密码");
            user = userService.login(phone, password);
        } else {
            user = userService.login(phone, password);
            if (null != user){
                dto.setState(200);
                dto.setMessage("登录成功");
            }else {
                dto.setState(300);
                dto.setMessage("账户密码不匹配,登录失败");
            }
        }
        dto.setContent(user);
        return dto;
    }



    // 根据接口文档，这里调用了一个图片（文件上传）的相关代码，先把图片传到自己D:/upload 文件夹内，之后再从该文件夹上传到 FastDFS
    @RequestMapping("/updateUserInfo")
    public  UserDTO updateUserInfo(MultipartHttpServletRequest request, Integer userid, String name )throws Exception{

        // 1......  将文件上传到自己的  web服务器

        // 获取上传的文件对象, Postman 里面图片指定的key —— fname
        MultipartFile file = request.getFile("fname");

        String oldFileName = file.getOriginalFilename();
        String hou = oldFileName.substring(oldFileName.lastIndexOf(".") + 1);

        // 生成 UUID 全新文件名
        String newFileName = UUID.randomUUID() + "." + hou;

        // 创建 web 服务器 保存的文件目录
        File toSaveFile = new File("D:/upload/" + newFileName);

        file.transferTo(toSaveFile);

        // 路径转换为文件
        String newFilePath = toSaveFile.getAbsolutePath();

        // 2......  文件从 web 服务器上传到FastDFS
        ClientGlobal.initByProperties("config/fastdfs-client.properties");
        TrackerClient trackerClient = new TrackerClient();
        TrackerServer trackerServer = trackerClient.getConnection();
        StorageServer storageServer = null;
        StorageClient1 client = new StorageClient1(trackerServer, storageServer);

        NameValuePair[] list = new NameValuePair[1];
        list[0] = new NameValuePair("fileName", oldFileName);
        String fileId = client.upload_appender_file1(newFilePath, hou, list);

        trackerServer.close();

        Integer i = userService.updateUserInfo(userid, fileId, name);

        // 最后根据返回值来判断自己图片上传的结果，上传成功, 一张图片，返回值为 1。
        // Pom文件添加相关依赖，这里的端口号改为80端口
        if (i == 1 ){
            System.out.println("上传成功!!!");
            UserDTO userDTO = new UserDTO(200, "修改成功", null);
            return userDTO;
        }else {
            System.out.println("上传失败 ");
            UserDTO userDTO = new UserDTO(300, "修改失败", null);
            return userDTO;
        }
    }

    // 更新密码
    @RequestMapping("/updatePassword")
    public UserDTO updatePassword( Integer userid , String password ){

        Integer i = userService.updatePassword(userid, password);

        // 根据返回值 来判断修改成功与否
        if (i == 1 ){
            return new UserDTO(200, "修改成功", null);
        }else {
            return new UserDTO(300, "修改失败", null);
        }

    }






}
